package com.搜索和回溯;

class Solution3 {
    public boolean isSymmetric(TreeNode root) {
        //树对称：要么空树，要么左右子树互为镜像
        if(root==null) return true;
        return recur(root.left,root.right);
    }

    boolean recur(TreeNode L,TreeNode R){
        if(L==null && R==null) return true;
        //条件的顺序不能变
        //if(L->val != R->val|| L==nullptr || R==nullptr) return false; 报错
        //为什么报错呢？如果L为nullptr，它就不存在左右孩子，这时候用L->val != R->val判断会出错！所以空子树（叶子）需要单独一个条件判断false，而且要在L->val之前判断，这样nullptr->val不会被调用，利用了||的短路！
        if(L==null||R==null||L.val!=R.val) return false;
        return recur(L.left,R.right)&&recur(L.right,R.left);
    }
}
public class 剑指Offer28对称的二叉树 {
    public static void main(String[] args) {

    }
}
